home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vcdstd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  8KB  |  189 lines

  1. /*  VCDstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type dComplex
  5.   (double-precision complex numbers)
  6.  
  7.   Copyright (c) 1996-1999 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VCDSTD_H
  12. #define __VCDSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. /*************************  Generation  **************************/
  22.  
  23. cdVector   __vf  VCD_vector( ui size );
  24. cdVector   __vf  VCD_vector0( ui size );
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. dComplex _VFAR * VCD_Pelement( cdVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VCD_element( X, n )  (*VCD_Pelement( X, n ))
  32.  
  33. /*******************  Initialization **********************************/
  34.  
  35. void  __vf  VCD_equ0( cdVector X, ui size );
  36. void  __vf  VCD_equ1( cdVector X, ui size );
  37. void  __vf  VCD_equC( cdVector X, ui size, dComplex C );
  38. void  __vf  VCD_equV( cdVector Y, cdVector X, ui size );
  39. void  __vf  VCDx_equV( cdVector Y, cdVector X, ui size,
  40.                        dComplex A, dComplex B );
  41. void  __vf  VCD_ramp( cdVector X, ui size, dComplex Start, dComplex Rise );
  42.  
  43. void  __vf  VD_CtoReIm( dVector Re, dVector Im, cdVector X, ui size );
  44. void  __vf  VD_ReImtoC( cdVector Y, dVector Re, dVector Im, ui size );
  45. void  __vf  VD_CtoRe( dVector Re, cdVector X, ui size );
  46. void  __vf  VD_RetoC( cdVector Y, dVector Re, ui size );
  47. void  __vf  VD_CtoIm( dVector Im, cdVector X, ui size );
  48. void  __vf  VD_ImtoC( cdVector Y, dVector Im, ui size );
  49. void  __vf  VD_CtoPolar( dVector Mag, dVector Arg, cdVector X, ui size );
  50. void  __vf  VD_PolartoC( cdVector Y, dVector Mag, dVector Arg, ui size );
  51. void  __vf  VD_CtoNorm( dVector Norm, cdVector X, ui size );
  52. void  __vf  VD_CtoAbs( dVector Abs, cdVector X, ui size );
  53. void  __vf  VD_CtoArg( dVector Arg, cdVector X, ui size );
  54. int   __vf  VCD_abs(   dVector Y, cdVector X, ui size );
  55. #define     VCD_real( Y, X, sz )         VD_CtoRe( Y, X, sz )
  56. #define     VCD_imag( Y, X, sz )         VD_CtoIm( Y, X, sz )
  57. #define     VCD_arg( Y, X, sz )          VD_CtoArg( Y, X, sz )
  58. #define     VCD_norm( Y, X, sz )         VD_CtoNorm( Y, X, sz )
  59. #define     VCD_polar( Y, Mag, Arg, sz ) VD_PolartoC( Y, Mag, Arg, sz )
  60. #define     VCD_complex( Y, Re, Im, sz ) VD_ReImtoC( Y, Re, Im, sz )
  61.  
  62.  
  63. /****************  Data-type interconversions  ***************************/
  64.  
  65. void  __vf   V_CFtoCD( cdVector Y, cfVector X, ui size );
  66. void  __vf   V_CDtoCF( cfVector Y, cdVector X, ui size );
  67. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  68.     void  __vf   V_CDtoCE( ceVector Y, cdVector X, ui size );
  69.     void  __vf   V_CEtoCD( cdVector Y, ceVector X, ui size );
  70. #else  /* no IEEE number support with other compilers */
  71.     #define V_CDtoCE VCD_equV
  72.     #define V_CEtoCD VCD_equV
  73. #endif
  74.  
  75.  
  76. /****************  Index-oriented manipulations ***********************/
  77.  
  78. void  __vf  VCD_reflect( cdVector X, ui size );
  79. void  __vf  VCD_delete( cdVector X, ui size, ui pos );
  80. void  __vf  VCD_insert( cdVector X, ui size, ui pos, dComplex C );
  81. void  __vf  VCD_rev( cdVector Y, cdVector X, ui size );
  82. #ifdef V_HUGE
  83.    void  __vf  VCD_rotate( cdVector Y, cdVector X, ui size, long pos );
  84. #else
  85.    void  __vf  VCD_rotate( cdVector Y, cdVector X, ui size, int pos );
  86. #endif
  87.  
  88. void  __vf  VCD_indpick( cdVector Y, uiVector Ind, ui sizey, cdVector X );
  89. void  __vf  VCD_indput(  cdVector Y, cdVector X, uiVector Ind, ui sizex );
  90. void  __vf  VCD_subvector( cdVector Y, ui sizey, cdVector X, int step );
  91.  
  92.  
  93. /***************** Functions of a sub-set of elements  ********************/
  94.  
  95. void  __vf  VCD_subvector_equC(  cdVector Y, ui subsiz, unsigned samp,
  96.                                  dComplex C );
  97. void  __vf  VCD_subvector_equV(  cdVector Y, ui subsiz, unsigned samp,
  98.                                  cdVector X );
  99.     /*   for arithmetic functions of subsets, see <VCDmath.h>  */
  100.  
  101.  
  102. /**************** One-Dimensional Vector Operations ***********************/
  103.  
  104. double    __vf  VCD_absmax(  cdVector X, ui size );
  105. double    __vf  VCD_absmin(  cdVector X, ui size );
  106. double    __vf  VCD_absmaxind( ui _VFAR *pos, cdVector X, ui size );
  107. double    __vf  VCD_absminind( ui _VFAR *pos, cdVector X, ui size );
  108. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  109. } // the following functions cannot be extern "C", if dComplex is a class
  110. #endif
  111. dComplex  __vf  VCD_maxReIm(     cdVector X, ui size );
  112. dComplex  __vf  VCD_minReIm(     cdVector X, ui size );
  113. dComplex  __vf  VCD_absmaxReIm(  cdVector X, ui size );
  114. dComplex  __vf  VCD_absminReIm(  cdVector X, ui size );
  115. dComplex  __vf  VCD_sum(     cdVector X, ui size );
  116. dComplex  __vf  VCD_prod(    cdVector X, ui size );
  117. dComplex  __vf  VCD_mean(   cdVector X, ui size );
  118. dComplex  __vf  VCD_meanwW( cdVector X, dVector Wt, ui size );
  119. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  120. extern "C" {
  121. #endif
  122. void      __vf  VCD_runsum(  cdVector Y, cdVector X, ui size );
  123. void      __vf  VCD_runprod( cdVector Y, cdVector X, ui size );
  124. int       __vf  VCD_iselementC( cdVector Tab, ui size, dComplex C );
  125. ui        __vf  VCD_iselementV( cdVector Y, cdVector X, ui sizex,
  126.                                 cdVector Tab, ui sizetab );
  127.  
  128.  
  129. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  130.  
  131. void  __vf   VCDl_FFT( cdVector Y, cdVector X, ui size, int dir );
  132. void  __vf   VCDl_filter( cdVector Y, cdVector X, cdVector Flt, ui size );
  133.  
  134. void  __vf   VCDs_FFT( cdVector Y, cdVector X, ui size, int dir );
  135. void  __vf   VCDs_filter( cdVector Y, cdVector X, cdVector Flt, ui size );
  136.  
  137. #if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
  138.    #define VCD_FFT       VCDl_FFT
  139.    #define VCD_filter    VCDl_filter
  140. #else
  141.    #define VCD_FFT       VCDs_FFT
  142.    #define VCD_filter    VCDs_filter
  143. #endif
  144.  
  145.  
  146. /***************************  Input and Output *****************************/
  147.  
  148. void  __vf  VCD_fprint( FILE _VFAR *stream, cdVector X, ui size,
  149.                                  unsigned nperline, unsigned linewidth );
  150. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  151.     void  __vf  VCD_cprint( cdVector X, ui size, unsigned nperline );
  152. #endif
  153. #define     VCD_print( X, sz, npl ) VCD_fprint( stdout, X, sz, npl, 80 )
  154.   /*  VCD_print, VCD_cprint usable only for DOS and Win32 console applications! */
  155. void  __vf  VCD_write( FILE _VFAR *stream, cdVector X, ui size );
  156. void  __vf  VCD_read( cdVector X, ui size, FILE _VFAR *stream );
  157. void  __vf  VCD_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  158. void  __vf  VCD_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  159. void  __vf  VCD_setWriteFormat( char _VFAR *FormatString );
  160.                                             /* for VCD_write and VCD_nwrite */
  161. void  __vf  VCD_setWriteSeparate( char _VFAR *SepString ); /* for VCD_write */
  162. void  __vf  VCD_setNWriteSeparate( char _VFAR *SepString ); /* for VCD_nwrite */
  163. #ifdef V_HUGE
  164.     void  __vf  VCD_store( FILE _VFAR *stream, cdVector X, ui size );
  165.     void  __vf  VCD_recall( cdVector X, ui size, FILE _VFAR *stream  );
  166. #else
  167.     #ifdef __cplusplus
  168.          void  inline VCD_store( FILE _VFAR *stream, cdVector X, ui size )
  169.          {    fwrite( X, sizeof(dComplex), size, stream ); 
  170.          }
  171.          void  inline VCD_recall( cdVector X, ui size, FILE _VFAR *stream )
  172.          {    fread(  X, sizeof(dComplex), size, stream );
  173.          }
  174.     #else
  175.         #define VCD_store( str, X, sz )  \
  176.                      fwrite( X, sizeof(dComplex), sz, str )
  177.         #define VCD_recall( X, sz, str ) \
  178.                      fread(  X, sizeof(dComplex), sz, str )
  179.     #endif
  180. #endif      /* VCD_store, VCD_recall in binary format */
  181.  
  182.  
  183. #ifdef __cplusplus
  184. }
  185. #endif
  186.  
  187.  
  188. #endif /*  __VCDSTD_H */
  189.